Оглавление
Создание проекта выполняемого на ПК без загрузки в МК.
Связать с недостающими исходниками.
Дерево заголовков - просмотр связей .h файлов.
Немотивированное затенение заголовочных файлов.
Включение внешних исходников в свой проект.
Подключение исходников через ссылки.
Подключение внешних (по отношению к проекту) исходников.
Реорганизация папок - перенос файлов в другие папки.
Добавление HAL процедур без использования CubeMX.
Импорт между родственными (основаны на eclipse) проектами
Использование центра импорта проектов.
IAR Embedded Workbench (EWARM) > Atollic.
Открытие и запуск примеров в приложениях к библиотекам CUBE.
Подключение чужого файла ссылающегося на дополнительные библиотеки.
Как запустить пример из библиотеки DSP и SPL.
Принадлежность неизвестной функции.
Ярлык для конкретной папки рабочего пространства.
Снижение нагрузки на процессор за счет отключения лишних инструментов.
New Project - C / C++ Project
Next
Задать имя.
Executable – PC C Project
OK
При изготовлении или реорганизации своего проекта среда не знает о существовании некоторых заголовочных и других файлов. Исправить это можено задав пути к файлам инклюдников и исходников к:..
инклюдникам .h
С/С++ Build - Settings - C Compiler - Directories = ../Users/Inc/modbus
исходникам .c
С/С++ General - Paths and Symbols - Source Location = добавить папку верхнего уровня
Инструмент для наглядного представления связей заголовочных .h файлов в виде дерева.
$Creating Links to External Files
Внешние файлы (вне папки проекта) интеграция.
Внешние файлы не переиндексируются. Чтобы заставить атолик следить за такими файлами, нужно добавить ссылку на файл, тогда физически он останется на прежнем месте, но будет показан в той папке куда мы укажем. Иконка будет отличатся от обычного файла. Файл работает как будто присутствует в проекте, индексируется. В частности #define #if сразу перерисовывается. Все это хорошо работает и удобно при интеграции нескольких проектов в один.
$Creating Links to External Files
Причиной такого может быть запомненное в воркспейсе некое свойство, затеняющее хедер.
Проверить так ли это можно
зачистить воркспейс
открыть дубликат проекта заново экспортом,
Размышления.
Заголовок не смотря на конструкцию #ifndef/#define/#endif все таки повторно включается?
Тогда понятно затенение
Предположить что компановщик неверно повтороно подключает
Как можно найти файл в котором неправомерно включается
Попробовать может найти по свн-у
Если напрямую подключить тот файл в котором сидит требуемый ресурс, компилятор вывалит кучу ошибок. В таких случаях нужно подключать самый общий заголовочный файл. Например, если нужны тип модуля RTC не нужно подключать #include "stm32l4xx_hal_rtc.h", нормально работает если подключить #include "stm32l4xx_hal.h"
Это требуется, например, когда в разных проектах нужно использовать одну и ту же общую папку
Удостоверится в отсутствии ошибок сборки, для того чтобы проверять компиляцией валидность каждого шага.
Вариант 1. С помощью мастера.
Добавить: New – File – кнопка «Advanced” – Link to file in the file system = V
кнопка «Variables” - выделить WORKSPACE_LOC - кнопка «Extend”
найти нужный файл - OK
в текстовом поле появляется надпись типа WORKSPACE_LOC/Users/Inc/adc/adc.h
в свойствах в поле Location тот же самый путь
в проекте тоже <locationURI>WORKSPACE_LOC/Users/Inc/adc/adc.h</locationURI>
Вариант 2. Полуавтоматический способ.
Добавить: New – File – кнопка «Advanced” – Link to file in the file system = V – Brose – найти файл. В поле появится абсолютный путь к файлу.
Добавить выражение ${PARENT-1-PROJECT_LOC} вместо пути заканчивающуюсегося папкой воркспейса, чтобы получился путь в таком формате {PARENT-1-PROJECT_LOC}\Common\Src\REG74HC165.c
Насколько я понимаю логика тут такая. ${PARENT-1-PROJECT_LOC} это «путь родителя проекта». Поскольку проект этот папк в фс, мы имеем путь на уровень выше папки проекта. Именно там у нас живет общая папка.
Вариант 3. Папки
Добавить ссылку на папку с исходниками
Правый клик — New – Folder
Окно «New Folder» - Advanced – Link to alternate location (Linked Folder). - Variables…
Выбрать WORKSPACE_LOC для обзора с уровня воркспейса. - Extend…
В окне Variable Extension кликаем на нужной папке — OK
В текстовом поле возникнет путь типа WORKSPACE_LOC/Users
В свойстве папки Location будет тоже, на папке будет значе ссылки, а на ее вложенных нет.
В конце любого из вариантов нужно
Properties - C/C++ Build — Settings
Вкладка Tool Settings — Directories
Добавить путь к каждой папке с .inc файлами.
При этом необходимо указать все конечные папки именно содержащие заголовки. Указать верхнюю папку с ними не прокатывает
Можно задать путь через кнопку Workspace
Собрать проект.
Перенести проект и собрать его на новом месте — проверив переносимость.
Подключить папку.
Разместить папку с исходниками на уровне воркспейса.
На проекте. Project – New – Folder
В окне New Folder – Adwansed – Link To Alternare Location
Найдем путь через привязку к воркспейсу.
Выделить Variables – WORKSPACE_LOC в списке. Поддерживаю простой принцип, что воркспейс располагается на уровень выше проекта. Это позволяет привязывать папки опираясь на воркспейс.
Жмем Extend для выбора пути.
В открывшемся окне выбираем нужную папку.
В поле формируется адрес типа WORKSPACE_LOC/Users
Finish
В Project Explorer появится Users.
Настроить связи.
Попробовать скомпилировать.
Для слежения за сборкой в main.c подключить файл из ссылочной папки и в main() вызвать какую нибудь функцию.
Скомпилировать. Ошибки связанные с осутствием ссылок должны быть удалены в следствие дальнейших действий.
Указать заголовочные файлы.
Открыть Build Settings – C C++ General – Path and Simbols
Добавить файлы Add – Workspace – указать папку с инклюдниками в откывшемся окне
В результате должно перестать ругаться на строчку типа #include "SPIDriver.h"
Придется указать все конечные папки с инклюдниками, общая папка уровнем выше не прокатит.
Указать исходники
Открыть и удостоверится что есть или добавить если нет
Path and Simbols - Source Location – Add Folder – выбрать папку с исходниками
долджны заработать вызовы процедур в ссылочной папке
Обобщение и перенос файлов name.c, .h в общую папку Common.
Применить форматирование BSD/Allman к обоим файлам. Число различий должно упасть до допустимого.
Atollic не может форматировать, использовать обычный эклипс.
Запустить эклипс указав расположение воркспейса.
Открыть сливаемые файлы
Настроить формата для проекта. Windows – Preference – C/C++ - Code Style – Formatter. «Привычная» кодировка (симметричные скобки) это BSD/Allman [built-in] или GNU [built-in].
Запустить форматирование Ctrl+Shift+F
Уменьшить количество различий удалением лишних блоков (коментов ил подобное). Тупая и безопасная операция.
Универсализация файлов с помощью дефайнов. После этого отовы к переносу в common.
Это действие обычно производиться в WinMerge c “файлом слева», который и будет с копирован в общую папку. Это нужно чтобы последний этап эволюции был нагляден.
перенос файлов в common.
В HG добавим.
В HG удалим.
В HG закомитим.
Подцепить файлы из обще папки в проект. Проверить сброку.
Перезапусить среду. Скомпилить и удостовериться в ошибках на тему отсутствия файлов и процедур.
Добавить: New – File – Advanced – Link to file in the file system – Brose – найти файл. В поле появится абсолютный путь к файлу.
Добавить выражение ${PARENT-1-PROJECT_LOC} чтобы получился путь в таком формате {PARENT-1-PROJECT_LOC}\Common\Src\REG74HC165.c
Насколько я понимаю логика тут такая.
${PARENT-1-PROJECT_LOC} это «путь родителя проекта». Поскольку проект этот папк в фс, мы имеем путь на уровень выше папки проекта. Именно там у нас живет общая папка.
Скомпилировать для проверки.
Из С в С++ проект конвертация.
Пока не пробовал, но конечно хорошо, что это есть.
$Converting a C-Project to a C++-Project
Добавить рабочий код использующий новые HAL (LL) процедуры. Как правило используется работающий проект. Так удобнее смотреть что откуда переходя по ссылкам.
Скопировать в целевой проект ПапкаПроекта\Drivers\STM32L4xx_HAL_Driver\Inc\ и ..\Src требуемые файлы исходников и заголовков HAL.
Теперь при нажатии на F3 в эти файл будет переходить курсор но проект все равно не будет собираться и среда также будет ругаться на процедуры HAL
Если так, то требуется раскоментить строку типа /*#define HAL_USART_MODULE_ENABLED */ в файле stm32l4xx_hal_conf.h. Файл можно найти поиском Ctrl + Shift + R
Ошибка поиска по файлам в Atollic.
Заменить workspase
Одной из важных и местами даже работающих фич является конвертация из старых типов проктов, формата AC6 и EWARM. Все мы желаем чтобы такое происходило в пару кликов. При случае попытайте счастья прочитав главы IMPORTING AC6 PROJECTS и IMPORTING EWARM PROJECTS. Это работает но бубен и варган желательны в комплекте..
Помни что файлы будут переписаны и затерты!
Правой мышью на поле
Import - Projects from Folder or Archive -
Далее выбираем папку или архив. Лучше архив, если есть такая возможность.
Если путь будет неверный, центр импорта попытается загрести все что может. Это может создать огромный долгий список.
При попытке вставить готовый путь в окно Browse for Folder происходит вышеназванная ситуация. Причиной могут быть лишние символы после последней папки
Import - Projects from Folder or Archive -
Далее выбираем папку или архив. Лучше архив, если есть такая возможность.
Получилось открыть обычным экспортом из архива. При этом A нашел несколько проектов и открыл их в ранее указанном воркспейсе.
Import – General – Project form Folder or Archive
Правой мышью на поле
Import - Projects from Folder or Archive -
Далее выбираем папку или архив. Лучше архив, если есть такая возможность.
На примере D:\PROJECTS\STM32CUBEExamples\STM32Cube_FW_F4_V1.24.0\Projects\STM32F4-Discovery\
открываем файл проекта D:\PROJECTS\STM32CUBEExamples\STM32Cube_FW_F4_V1.24.0\Projects\STM32469I-Discovery\Examples\BSP\SW4STM32\STM32469I_DISCO\.project
указываем место для воркспейса D:\PROJECTS\STM32CUBEExamples\
соглашаемся на конвертацию
находим открываем main. Ребилд. Проект должен собраться без предупреждений
Возможные стратегии.
Скопировать полный комплект библиотек.
-
Вероятность множества незавершенных связей велика.
Их количество в понетциале не разребаемо.
+
Если намудохаться однократно подключив все библиотеки, есть вероятность в будущем получить сразу подключаемую хрень.
Скопировать только нужную библиотеку.
-
Вероятность множества связей так же велико.
+
Вроде бы потенциально их меньше
Если ест пример в котором используется такая функция можно скопировать библиотеки из этого примера
Это описано в stm_____xx_dsp_stdperiph_lib_um.chm
Получаем какой нибудь рабочий проект, например в кубе HAL.
Что про стартап файл..
Точкой входа библиотеки является stm32f4xx.h (Libraries\CMSIS\Device\ST\STM32F4xx\Include) пользователь должен подключить ее в main.c и сконфигурировать, а именно раскоменнтить дефайн с нужным оборудованием
Затем надо выбрать использовать или нет периферийный драйвер драйвер
Если код приложения базируется на SPL драйвере
раскоментировать #define USE_PERIPH_LIBRARY (default)
в stm32f4xx_conf.h выбрать периферию для включения в заголовочный файл
используя периферийный API драйвера построить проект — далее об этом подробно рассказано
в дополнение к перефирийным дровам можно использовать примеры чтобы быстро стартануть
Если же код приложения базируется на периферийных регистрах прямого доступа
заокоментить #define USE_PERIPH_LIBRARY
использовать периферийные регистры структуры и биты доступные внутри stm32f4xx.h для построения приложения
Добавить system_stm32f4xx.c (Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates) файл в свое приложение, он обеспечит функции настраивающие систему: PPL, тактирование и Flash интерфейс. Это обеспечивает выбор частот системных часов, например модификацией PLL
Peripheral initialization and configuration
.. надо бы вписать
Скопировать из папки с примером подобные файлы main.c , main.h (if exists), system_stm32f4xx.c, stm32f4xx_it.c, platform_config.h (if exists), stm32f4xx_it.h, stm32f4xx_conf.h и любые другие которые будут. В папке проекта уже должны лежать все файлы позволяющие успешно компилировать проект.
Открыть проект.
Если потребуется добавить недостающее — смотри файл redme в примере.
Сделать ребилд.
Запусить.
Удалось успешно произвести эти действия предварительно создав проект так.
Создать воркспейс
New – C Project – Embedded C Project – Atollic ARM Tools(Toolchain)
Выбрать камень — Next
Newlib standart (может и не важно) – Next
ST-LINK
Многократно всплывают “Auto ignored derived resourced..” и сами убираются при построении
Искать одновременно по названию функции и названиям типов в параметрах функции
поиск Description of STM32F4 HAL and LL drivers
поиск в stm32f4xx_dsp_stdperiph_lib_um.chm
поиск в en.DM00031020_ReferenceManual.pdf
DocFetcher может ускорить данных процесс.
Один варнинг на строке while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);
При этом DSP драйверы уже добавлены в проект и примеры могут компилится и без библиотек
Смена MCU.
На Atollic я переходил после Mplaba. В начале напрягало, что не все настройки живут в файле проекта, а есть еще какая то рабочая среда. Прояснить этот момент можно прочитав вводную часть про систему workspaces / projects. :
Рабочая область содержит проекты. В каком то смысле рабочей областью можно считать папку, которая содержит папку проекта или проектов.
Проект содержит файлы. Технически проект это папка содержащая файлы проекта. Ничто не мешает организовывать подпапки — тут ключевое, что они внутри папки проекта.
Папка проекта, а также файлы проекта не могут существовать за границами папки рабочей области.
Исходя из этой «идеологии» становятся понятны причины такого:
Нет файла проекта открыв который можно было бы получить полностью работоспособный инструмент. Это вам не MPLab, IAR и прочие... Тут вам не там. В частности, в рабочей среде живут настройки отладчика, и это автоматически исключает готовность к отладке при открытии только проекта без связи с ранее сохраненной рабочей средой.
Atollic TrueSTUDIO. Atollic рекомендует, чтобы папка Active Workspace находилась не слишком много уровней ниже корня файловой системы. Это сделано для того, чтобы избежать превышения символьных ограничений длины пути Windows®. Это может вызвать ошибки сборки, если пути к файлам станут длиннее, чем может обработать Windows. В простых проектах можно размещать воркспейс на уровень выше проекта. Это удобно если хочется прописывать относительные пути, что бы сохранить перемещаемость. Также плюс такого подхода в том, что при экспорте в открывшемся проводнике не подскажут куда идти.
Из хорошего — не нужно добавлять явно файл в проект. Его автоматическое добавление происходит при добавлении файла в папку проекта. Это не касается сложных случаев в ссылками на файлы. Никто не отменяет необходимость подключения файлов через хедеры, но на одно движение все таки меньше — хоть что-то «делают за нас» ).
Сохранить настройки рабочей среды.
Хотел перетаскивать с проекта на проект визуальную и прочую конфигурацию окон, но не смог заставить работать сохранение – восстановление. Возможно вам повезет больше. Если заработает отпишитесь, плиз.
$Backup of Preferences for a Workspace
Для этого есть ключ -data
пример
"C:\Program Files (x86)\Atollic\TrueSTUDIO for STM32 9.3.0\ide\TrueSTUDIO.exe" -data D:\PROJECTS\AtollicWrkPrj\ИмяФайлаTemp4
Снизить нагрузку на процессор ПК можно отключив показ некоторых видов, что логично — будет тратиться меньше ресурсов на отрисовку и подготовку данных. Не могу утверждать, что это сильно поможет, но лучше, чем ничего. Ждем отзывов от владельцев ветхих ПК.
@ Window, Preferences and in the Preference Dialog select General, Startup and Shutdown
$ Perspectives & Views.
Фича на которую у меня были виды, так как хотелось бы настроить один воркспейс образцово показательно: горячие клавиши, отладчики и прочее. И затем быстро экспортировать все эти предпочтения в другие проекты, но... что-то пошло не так. На форуме ST не ответили ничего дельного.
@ Project Explorer - Import – General – Preferences
@ Project Explorer - Export – General – Preferences
v1.